/***********************************************************************************************
 * File Name   :	windows_15_wizard_local.c
 * Programmer  : 	kmist
 * Start Date  : 	11/8/2020
 * Last Update : 	11/8/2020
 *----------------------------------------------------------------------------------------------
 *Functions:
 *	    void win15_wizard_local_create(void)                    //窗口创建初始化
 *      void win14_wizard_local_destory(void)                   //窗口销毁
 *	    int win15_wizard_local_display(void)                    //窗口显示
 *      uint8_t win15_wizard_btn_select(void *arg)              //按键选择
 *      uint8_t win15_wizard_btn_enter(void *arg)               //按键确认
 *      uint8_t win15_wizard_btn_exit(void *arg)                //按键退出
 *
 * Inner Func:
 *      static void config_year_month_day(void)                 //年月配置显示
 *      static void config_hour_min_sec(void)                   //日分秒配置显示
 ***********************************************************************************************/
#include "user_extern.h"

static uint8_t page = 0;   /* 页面 */
static uint8_t selidx = 0; /* 用来定位光标当前在哪个变量 */
static uint8_t icount = 0; /* 用来控制闪烁特效 */
static void config_year_month_day(void);
static void config_hour_min_sec(void);

/*********************************************************************
 *  名称： win15_wizard_local_display
 *  功能： 引导界面本地时间显示接口
 *  参数： void
 *  返回值：void
 ********************************************************************/
uint8_t win15_wizard_local_display(void)
{
    uint8_t win_ret = WINDOWS_STATUS_DIS_ONLY;
    switch (page)
    {
    case 0:
        config_year_month_day();
        break;
    case 1:
        config_hour_min_sec();
        break;
    }
    return win_ret;
}

/*********************************************************************
 *  名称： win15_wizard_btn_select
 *  功能： 引导界面本地时间 选择按钮触发，切换下一个可选项
 *  参数： void
 *  返回值：0
 ********************************************************************/
uint8_t win15_wizard_btn_select(void *arg)
{
    selidx++;
    if (page == 0 && selidx > 2)
    {
        selidx = 0;
        return WINDOWS_STATUS_DIS_ONLY;
    }

    if (page == 1 && selidx > 1)
        selidx = 0;
    return WINDOWS_STATUS_DIS_ONLY;
}

/*********************************************************************
 *  名称： win15_wizard_btn_enter
 *  功能： 引导界面本地时间 确认按钮触发，配置年月日时分秒
 *  参数： void
 *  返回值：0
 ********************************************************************/
uint8_t win15_wizard_btn_enter(void *arg)
{
    /* year */
    if (page == 0)
    {
        if (selidx == 0)
        {
            local_time_add_year(&mtime.g_time);
        }
        else if (selidx == 1)
        {
            local_time_add_month(&mtime.g_time);
        }
        else
        {
            local_time_add_day(&mtime.g_time);
        }
    }
    else
    {
        if (selidx == 0)
        {
            local_time_add_hour(&mtime.g_time);
        }
        else
        {
            local_time_add_min(&mtime.g_time);
        }
    }
    return WINDOWS_STATUS_DIS_ONLY;
}

/*********************************************************************
 *  名称： win15_wizard_btn_exit
 *  功能： 引导界面本地时间 退出按钮触发，进入下一页配置和退出保存
 *  参数： void
 *  返回值：0
 ********************************************************************/
uint8_t win15_wizard_btn_exit(void *arg)
{
    page++;
    selidx = 0;
    icount = 0;
    if (page > 1)
    {
        page = 0;
        selidx = 0;
        icount = 0;
        mtime.ltime_to_tstamp();
        Dsystem.windows_cur_id = WIN_UI_DESKTOP;
        Dsystem.windows_sub_id = 0;
        Dsystem.ui_frame_time = 100;
        Dsystem.initialization_flag = 1;
        flash_set_value_i8(SYSTEM_VALUE, SYS_FIRST_INIT, Dsystem.initialization_flag); /* 0:FIRST_INIT */
        return WINDOWS_STATUS_INIT;
    }
    return WINDOWS_STATUS_DIS_ONLY;
}

/**************************** 内联函数 ********************************/
static void config_year_month_day(void)
{
    char str[16] = {0};
    if (selidx == 0 && icount % 2 == 0)
    {
        sprintf(str, "  %s  ", "    ");
    }
    else
    {
        sprintf(str, "  %d  ", mtime.g_time.tm_year);
    }
    oled.show_string(0, 0, T(str), STR_SIZE_32, 0);
    //oled.show_string(POSITION_CENTER(str, 32), 0, (const uint8_t *)str, 32, 0);

    if (selidx == 1 && icount % 2 == 0)
    {
        sprintf(str, "%s", "  ");
    }
    else
    {
        sprintf(str, "%02d", mtime.g_time.tm_mon);
    }
    oled.show_string(24, 32, T(str), STR_SIZE_32, 1);

    sprintf(str, "%s", "-");
    oled.show_string(60, 32, T(str), STR_SIZE_32, 1);

    if (selidx == 2 && icount % 2 == 0)
    {
        sprintf(str, "%s", "  ");
    }
    else
    {
        sprintf(str, "%02d", mtime.g_time.tm_mday);
    }
    oled.show_string(80, 32, T(str), STR_SIZE_32, 1);
    icount = (icount + 1) % 2;
}

static void config_hour_min_sec(void)
{
    char str[16] = {0};
    if (selidx == 0 && icount % 2 == 0)
    {
        sprintf(str, "%s", "  ");
    }
    else
    {
        sprintf(str, "%02d", mtime.g_time.tm_hour);
    }
    oled.show_string(24, 16, T(str), STR_SIZE_32, 1);

    sprintf(str, "%s", ":");
    oled.show_string(56, 16, T(str), STR_SIZE_32, 1);

    if (selidx == 1 && icount % 2 == 0)
    {
        sprintf(str, "%s", "  ");
    }
    else
    {
        sprintf(str, "%02d", mtime.g_time.tm_min);
    }
    oled.show_string(72, 16, T(str), STR_SIZE_32, 1);

    if (selidx == 3 && icount % 2 == 0)
    {
        sprintf(str, "%s", "  ");
    }
    else
    {
        sprintf(str, "%02d", mtime.g_time.tm_sec);
    }
    oled.show_string(88, 50, T(str), STR_SIZE_16, 1);
    icount = (icount + 1) % 2;
}
